package com.example.test_1;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class demoListView extends AppCompatActivity {

    /**
     ListView：列表视图，是一个显示垂直滚动列表的试图组件

     Adapter(适配器):Adapter 是一个用于将数据源与 ListView 相关联的桥梁。
     它负责将数据转换为列表项的视图，并提供了数据和视图之间的绑定。
     Adapter是一个抽象类，开发者通常需要通过继承它来创建自定义适配器。

     数据适配器是数据与试图的桥梁，在数据适配器中设置数据
     那么设置item的试图，常用的数据适配器如下
     BaseAdapter(重点）
     SimpleAdapter
     ArrayAdapter

     BaseAdapter：抽象类，有四个抽象方法
     1.getCount 该方法用于获取适配器中数据项的数量
     2.getItem 该方法用于获取指定位置的数据项
     3.getItemId 返回指定位置的数据项的唯一标识符，通常使用数据项的Id或位置索引作为标识符
     4.getView（重点） 该方法用于获取指定位置的数据项的试图

     第一步准备listView
     第二步准备数据
     private String[] titles = {"桌子","苹果","蛋糕","棒棒糖","围巾"};
     //价格
     private String[] prices = {"1000元","10元/kg","200元","20元","50元"};
     //图片
     private int[] icons = {R.drawable.lu1,R.drawable.lu2,R.drawable.hs3,R.drawable.shui,R.drawable.tiank};

     第三步：创建adapter

     */

    //标题
    private String[] titles = {"桌子","苹果","蛋糕","棒棒糖","围巾","对象"};
    //价格
    private String[] prices = {"1000元","10元/kg","200元","20元","50元","6666"};
    //图片
    private int[] icons = {R.drawable.lu1,R.drawable.lu2,R.drawable.hs3,R.drawable.shui,R.drawable.tiank,R.drawable.lu2};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo_list_view);

        //初始化ListView,获取listView对象
        ListView listView = findViewById(R.id.list_view);
        MyAdapter myAdapter = new MyAdapter();//创建adapter
        //与MyAdapter关联起来，需要用到listView.setAdapter
        listView.setAdapter(myAdapter);//添加adapter


        /**
         单击事件 setOnItemClickListener
         */
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                Toast.makeText(demoListView.this, "标题:" + titles[position] + "价格：" + prices[position], Toast.LENGTH_SHORT).show();

            }
        });


        /**
         长按事件 setOnItemLongClickListener
         */

        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(demoListView.this, "长按事件" + titles[i], Toast.LENGTH_SHORT).show();
                return true;
            }
        });

    }

    public void guaB(View view) {
        finish();
    }

    //创建MyAdapter继承BaseAdapter，实现四个方法
    class MyAdapter extends BaseAdapter {

        //返回有多少条数据
        @Override
        public int getCount() {
            return titles.length;
        }

        //获取每一个项的条目
        @Override
        public Object getItem(int position) {
            return titles[position];
        }

        //唯一标识符，当时索引作为id
        @Override
        public long getItemId(int position) {
            return position;
        }

        /**
         * 通过viewHolder类缓存item
         * getView(int position, View convertView, ViewGroup viewGroup)
         * position:当前数据项的位置
         * convertView:可复用的试图对象，用于优化列表的性能
         * parent:父级试图组，即ListView或GridView
         * <p>
         * 第二个参数convertView代表滑出屏幕的item对象，我们可以复用这个对象，一开始的时候
         * convertView为null，需要加载布局，创建item对象，滑出屏幕，这个item对象会缓存
         * 起来，再次滑入屏幕，convertView就是缓存中取出的item对象
         */
/*        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //加载布局
            View inflate = View.inflate(demoListView.this, R.layout.item_list, null);

            //2.获取控件
            ImageView iv_icon = inflate.findViewById(R.id.iv);
            TextView iv_title = inflate.findViewById(R.id.title);
            TextView iv_price = inflate.findViewById(R.id.tv_price);

            //3.设置数据
            iv_icon.setImageResource(icons[position]);
            iv_title.setText(titles[position]);
            iv_price.setText(prices[position]);

            return inflate;
        }*/
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //优化代码
            VH holder;
            MyAdapter vh = null;
            if (convertView == null) {//判断是否为null
                //加载布局
                convertView = View.inflate(demoListView.this, R.layout.item_list, null);
                holder = new VH();
                //2.获取控件
                holder.iv_icon = convertView.findViewById(R.id.iv);
                holder.iv_title = convertView.findViewById(R.id.title);
                holder.iv_price = convertView.findViewById(R.id.tv_price);
                convertView.setTag(holder);

            } else {
                holder = (VH) convertView.getTag();
            }
            //3.设置数据
            holder.iv_icon.setImageResource(icons[position]);
            holder.iv_title.setText(titles[position]);
            holder.iv_price .setText(prices[position]);
            return convertView;
        }
        class VH{
            ImageView iv_icon;
            TextView iv_title;
            TextView iv_price;
        }
    }
}